↳ Prolog
↳ PrologToPiTRSProof
countstack_in_ga(empty, 0) → countstack_out_ga(empty, 0)
countstack_in_ga(push(nil, T), X) → U1_ga(T, X, countstack_in_ga(T, X))
countstack_in_ga(push(cons(U, V), T), s(X)) → U2_ga(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
U2_ga(U, V, T, X, countstack_out_ga(push(U, push(V, T)), X)) → countstack_out_ga(push(cons(U, V), T), s(X))
U1_ga(T, X, countstack_out_ga(T, X)) → countstack_out_ga(push(nil, T), X)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
countstack_in_ga(empty, 0) → countstack_out_ga(empty, 0)
countstack_in_ga(push(nil, T), X) → U1_ga(T, X, countstack_in_ga(T, X))
countstack_in_ga(push(cons(U, V), T), s(X)) → U2_ga(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
U2_ga(U, V, T, X, countstack_out_ga(push(U, push(V, T)), X)) → countstack_out_ga(push(cons(U, V), T), s(X))
U1_ga(T, X, countstack_out_ga(T, X)) → countstack_out_ga(push(nil, T), X)
COUNTSTACK_IN_GA(push(nil, T), X) → U1_GA(T, X, countstack_in_ga(T, X))
COUNTSTACK_IN_GA(push(nil, T), X) → COUNTSTACK_IN_GA(T, X)
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → U2_GA(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → COUNTSTACK_IN_GA(push(U, push(V, T)), X)
countstack_in_ga(empty, 0) → countstack_out_ga(empty, 0)
countstack_in_ga(push(nil, T), X) → U1_ga(T, X, countstack_in_ga(T, X))
countstack_in_ga(push(cons(U, V), T), s(X)) → U2_ga(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
U2_ga(U, V, T, X, countstack_out_ga(push(U, push(V, T)), X)) → countstack_out_ga(push(cons(U, V), T), s(X))
U1_ga(T, X, countstack_out_ga(T, X)) → countstack_out_ga(push(nil, T), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
COUNTSTACK_IN_GA(push(nil, T), X) → U1_GA(T, X, countstack_in_ga(T, X))
COUNTSTACK_IN_GA(push(nil, T), X) → COUNTSTACK_IN_GA(T, X)
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → U2_GA(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → COUNTSTACK_IN_GA(push(U, push(V, T)), X)
countstack_in_ga(empty, 0) → countstack_out_ga(empty, 0)
countstack_in_ga(push(nil, T), X) → U1_ga(T, X, countstack_in_ga(T, X))
countstack_in_ga(push(cons(U, V), T), s(X)) → U2_ga(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
U2_ga(U, V, T, X, countstack_out_ga(push(U, push(V, T)), X)) → countstack_out_ga(push(cons(U, V), T), s(X))
U1_ga(T, X, countstack_out_ga(T, X)) → countstack_out_ga(push(nil, T), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
COUNTSTACK_IN_GA(push(nil, T), X) → COUNTSTACK_IN_GA(T, X)
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → COUNTSTACK_IN_GA(push(U, push(V, T)), X)
countstack_in_ga(empty, 0) → countstack_out_ga(empty, 0)
countstack_in_ga(push(nil, T), X) → U1_ga(T, X, countstack_in_ga(T, X))
countstack_in_ga(push(cons(U, V), T), s(X)) → U2_ga(U, V, T, X, countstack_in_ga(push(U, push(V, T)), X))
U2_ga(U, V, T, X, countstack_out_ga(push(U, push(V, T)), X)) → countstack_out_ga(push(cons(U, V), T), s(X))
U1_ga(T, X, countstack_out_ga(T, X)) → countstack_out_ga(push(nil, T), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
COUNTSTACK_IN_GA(push(nil, T), X) → COUNTSTACK_IN_GA(T, X)
COUNTSTACK_IN_GA(push(cons(U, V), T), s(X)) → COUNTSTACK_IN_GA(push(U, push(V, T)), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
COUNTSTACK_IN_GA(push(cons(U, V), T)) → COUNTSTACK_IN_GA(push(U, push(V, T)))
COUNTSTACK_IN_GA(push(nil, T)) → COUNTSTACK_IN_GA(T)
No rules are removed from R.
COUNTSTACK_IN_GA(push(cons(U, V), T)) → COUNTSTACK_IN_GA(push(U, push(V, T)))
COUNTSTACK_IN_GA(push(nil, T)) → COUNTSTACK_IN_GA(T)
POL(COUNTSTACK_IN_GA(x1)) = 2·x1
POL(cons(x1, x2)) = 2 + 2·x1 + 2·x2
POL(nil) = 0
POL(push(x1, x2)) = 1 + 2·x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ PisEmptyProof